﻿using UIFrameworkServices;

namespace AutoRevit.Shortcut;

/// <summary>
/// 快捷方式帮助工具
/// </summary>
public class ShortcutItemAgency
{
    /// <summary>
    /// 快捷方式帮助工具 实例化
    /// </summary>
    /// <param name="shortcutItem"></param>
    public ShortcutItemAgency(ShortcutItem shortcutItem)
    {
        ShortcutItem = shortcutItem;
    }

    /// <summary>
    /// 快捷方式项目
    /// </summary>
    public ShortcutItem ShortcutItem { get; }

    /// <summary>
    /// 新增快捷方式
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public bool AddShortcut(string key)
    {
        string? findOldKey = ShortcutItem.Shortcuts.FirstOrDefault(t => t == key);

        if (!string.IsNullOrWhiteSpace(findOldKey)) return false;

        ShortcutItem.Shortcuts.Add(key);

        return true;
    }

    /// <summary>
    /// 新增快捷方式立即生效
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public bool AddShortcutNow(string key)
    {
        if (AddShortcut(key))
        {
            Push();
            return true;
        }
        return false;
    }

    /// <summary>
    /// 查找快捷键并覆盖
    /// </summary>
    /// <param name="oldKey"></param>
    /// <param name="newKey"></param>
    /// <returns></returns>
    public bool FindReplace(string oldKey, string newKey)
    {
        if (ShortcutItem is null) return false;

        string? findOldKey = ShortcutItem.Shortcuts.FirstOrDefault(t => t == oldKey);

        if (!string.IsNullOrWhiteSpace(findOldKey))
        {
            ShortcutItem.Shortcuts.Remove(findOldKey);
        }

        if (!string.IsNullOrWhiteSpace(newKey))
        {
            ShortcutItem.Shortcuts.Add(newKey);
        }
        return true;
    }

    /// <summary>
    /// 查找快捷键并覆盖并提交
    /// </summary>
    /// <param name="oldKey"></param>
    /// <param name="newKey"></param>
    /// <returns></returns>
    public bool FindReplaceNow(string oldKey, string newKey)
    {
        if (FindReplace(oldKey, newKey))
        {
            Push();
            return true;
        }
        return false;
    }

    /// <summary>
    /// 推送修改
    /// </summary>
    public void Push()
    {
        KeyboardShortcutService.applyShortcutChanges(new Dictionary<string, ShortcutItem>()
        {
            {
                ShortcutItem.CommandId,
                ShortcutItem
            }
        });
    }
}
